'use strict';

import { Service } from 'egg';

export default class SolutionService extends Service{
    /**
     * 分页查询所有解决方案
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Number} code 返回状态码 0失败  200成功
     * {String} message 返回状态对应提示消息
     * {Object} data 查询返回结果
     * {Object[]} data.data_info 产品列表
     * {String} data.data_info.product_id 产品ID 
     * {String} data.data_info.product_name 产品名称
     * {String} data.data_info.sort 产品排序
     * {String} data.data_info.create_time 创建时间
     * {String} data.data_info.category_name 产品类型名称
     * {String} data.data_info.sub_name 产品子类型名称
     * {String} data.data_info.sub_id 产品子类型Id
     * {String} data.data_info.category_id 产品类型ID
     * 过程：
     *  构建分页查询条件
     *  分页查询数据，分页结果处理逻辑，返回结果
     */
    async find_and_count_all(condition,order_condition,page){
        const {ctx,app}=this;
        const {Category,Solution,Sub}=app.model
        try {
            let page_param=ctx.helper.page_param(page);
            let result=await Solution.findAndCountAll({
                where:condition,
                include:[{
                    model:Category,
                    attributes: ['category_id','category_name'],
                    association:Solution.belongsTo(Category,{ foreignKey: 'category_id'})
                },{
                    model:Sub,
                    attributes: ['sub_id','sub_name'],
                    association:Solution.belongsTo(Sub,{ foreignKey: 'sub_id'})
                }],
                raw:true,
                order:order_condition,
                limit:page_param.page_size,
                offset:page_param.offset
            });
            result=JSON.parse(JSON.stringify(result));
            let len=result.rows.length;
            for(let i=0;i<len;i++){
                let resource_info:any=result.rows[i];
                ctx.helper.dot_filter(resource_info);
                resource_info['create_time']=ctx.helper.date_format(resource_info['create_time'],"yyyy-MM-dd hh:mm:ss")
            }
            return ctx.helper.success_result("操作成功",ctx.helper.page_result(result,page_param.page_size))
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
    /**
     * 
     * @param condition 
     * @param order_condition 
     * @param model_name 
     * 过程：
     * 查询所有解决方案数据返回结果
     */
    async find_all(condition,order_condition,model_name){
        const {ctx,app}=this;
        try {
            let result=await app.model[model_name].findAll({
                where:condition,
                order:order_condition,
            });
            return ctx.helper.success_result("操作成功",result)
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
    /**
     * 
     * @param condition 
     * {Number} code 返回状态码 0失败  200成功
     * {String} message 返回状态对应提示消息
     * {Object} data 查询结果结构
     * {String} data.product_name 产品名称
     * {String} data.product_id 产品ID
     * {Object[]} data.resource 产品内容数组
     * {Number} data.resource.resource_id 产品内容资源ID
     * {String} data.resource.resource_name 产品内容资源名称
     * {String} data.resource.resource_url 资源路径
     * {String} data.resource.resource_content 产品内容资源对应视频路径
     * {Number} data.category_id 产品分类ID
     * {String} data.category_name 产品分类名称
     * {String} data.sub_name 产品子分类名称
     * {Number} data.sub_id 产品子分类ID
     * {String} data.create_time 产品创建时间
     * 过程：
     *  查询当前解决方案
     *  处理后返回成功结果处理逻辑，返回结果
     */
    async find_one(condition){
        const {ctx,app}=this;
        const {Category,Solution,Sub,Resource}=app.model
        try {
            let result_info:any=await Solution.findOne({
                where:condition,
                include:[
                    {
                        model:Category,
                        attributes: ['category_id','category_name'],
                        association:Solution.belongsTo(Category,{ foreignKey: 'category_id'})
                    },{
                        model:Sub,
                        attributes: ['sub_id','sub_name'],
                        association:Solution.belongsTo(Sub,{ foreignKey: 'sub_id'})
                    }
                ],
                raw:true
            });
            result_info=JSON.parse(JSON.stringify(result_info));

            let resource:object[]=await Resource.findAll({where:{parent_id:condition['solution_id'],type:2}});
            if(resource.length>0){
                // resource.map(ele=>{
                //     ele['create_time']=ctx.helper.date_format_basic(ele['create_time']);
                // })
                resource=ctx.service.common.get_resource_list(resource)
            }
            ctx.helper.dot_filter(result_info);
            result_info['create_time']=result_info ? ctx.helper.date_format(result_info['create_time'],"yyyy-MM-dd hh:mm:ss") :"";
            result_info['resource']=resource;
            return ctx.helper.success_result("操作成功",result_info)
        } catch (error) {
            console.log(error);
            return ctx.helper.error_result("查询出错");
        }
    }
}